이벤트 히스토리 설계

이벤트 히스토리 설계

사용자 행동 데이터를 기록하는 DB 스키마 설계 — 정규화 + Key-Value + 인과관계 추적

핵심 개념 정의

용어 설명
액션(Action) 화면 이동/전환 등 더 큰 단위의 상황 (예: MAIN_VIEW)
이벤트(Event) 화면 내 구체적 동작 (예: SAVE_BUTTON_CLICK, 스크롤)

1단계: 정의(Definition)와 로그(Log) 분리

테이블 역할 핵심 컬럼
users 사용자 마스터 user_id, email, created_at
actions 액션 정의 목록 action_id, name
action_logs 실제 액션 발생 기록 action_log_id, user_id, action_id
events 이벤트 정의 목록 event_id, name
event_logs 실제 이벤트 발생 기록 event_log_id, action_log_id, value_*

2단계: 화면 전환 컨텍스트 추가

문제: "어디서 어디로 전환했는지" 분석 불가

해결: event_logsfrom_screen, to_screen 컬럼 추가

event_log_id | user_id | event_id | from_screen | to_screen | session_id | step_order | timestamp

→ 화면 간 이동 경로 추적 가능 (퍼널 분석 기반)


3단계: Key-Value 테이블로 유연한 메타데이터

문제: 타입별 컬럼(value_int 등)은 비정형 정보 저장에 부적합 → NULL 값 증가

해결: event_log_attributes Key-Value 저장소 추가

attribute_id | event_log_id (FK) | key (VARCHAR) | value (TEXT)

예시:

→ DB 스키마 변경 없이 어떤 컨텍스트 데이터도 유연하게 추가 가능


4단계: 이벤트-액션 인과관계 연결

문제: "어떤 액션이 어떤 이벤트를 유발했는가?" 기록 불가

해결: event_logstrigger_action_log_id 컬럼 추가

event_log_id | ... | trigger_action_log_id (FK → action_logs) | from_screen | to_screen | ...

→ 이벤트를 유발한 액션 로그 직접 추적 가능


최종 설계: 하이브리드 모델

정규화된 구조 (정의/로그 분리)
  + 타입 명시 컬럼 (action_logs)
  + Key-Value 확장 (event_log_attributes)
  + 인과관계 추적 (trigger_action_log_id)

가능해지는 분석

관련 개념